package com.oldbook.manage.mapper;

import com.oldbook.manage.domain.Textbook;
import com.oldbook.manage.domain.vo.TextbookVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 教材管理Mapper接口
 *
 * @author Exiaoke
 * @date 2025-02-17
 */
public interface TextbookMapper
{
    /**
     * 查询教材管理
     *
     * @param textbookId 教材管理主键
     * @return 教材管理
     */
    public Textbook selectTextbookByTextbookId(Long textbookId);

    /**
     * 查询教材管理列表
     *
     * @param textbook 教材管理
     * @return 教材管理集合
     */
    public List<TextbookVO> selectTextbookList(Textbook textbook);

    /**
     * 新增教材管理
     *
     * @param textbook 教材管理
     * @return 结果
     */
    public int insertTextbook(Textbook textbook);

    /**
     * 修改教材管理
     *
     * @param textbook 教材管理
     * @return 结果
     */
    public int updateTextbook(Textbook textbook);

    /**
     * 删除教材管理
     *
     * @param textbookId 教材管理主键
     * @return 结果
     */
    public int deleteTextbookByTextbookId(Long textbookId);

    /**
     * 批量删除教材管理
     *
     * @param textbookIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteTextbookByTextbookIds(@Param("textbookIds") Long[] textbookIds);

    /**
     * 根据ID查询教材（带版本号)
     * @param textbookId
     * @param version
     * @return
     */
    Textbook selectByIdWithVersion(@Param("textbookId") Long textbookId, @Param("version") Integer version);

    /**
     * 扣减库存（带乐观锁）
     * @param id
     * @param num
     * @param version
     * @return
     */
    int deductStockWithVersion(@Param("textbookId") Long textbookId, @Param("num") Integer num, @Param("version") long version);

    Textbook selectByIdForUpdate(Long textbookId);
}
